/**
@mainpage Руководство программиста WebFormsQA
@version 1.2 Release
\n
<hr/>
\n
@section WebformsqaTOC Содержание
\n
 -# @ref Intro
 -# @ref License
 -# @ref InstallPage
  -# @ref InstallPageWindows
  -# @ref InstallPageLinux
  -# @ref InstallDatabaseMySql
 -# @ref WebClientServer
 -# @ref UseTech
    -# @ref UseTechTDD
    -# @ref UseTechSmarty
    -# @ref UseTechOOP
    -# @ref UseTechDoxigen
    -# @ref UseTechOpen
        -# @ref UseTechOpenSubversion
        -# @ref UseTechOpenRedmine
        -# @ref UseTechOpenCruise
 -# @ref ConceptWebFormsQA
 -# @ref VersionDistrib
 -# @ref OfficialSite
 -# @ref StructMySql
 -# @ref DescriptionUserGUI
  -# @ref PageRegisterUser
  -# @ref TabViewQuestion
  -# @ref TabGiveQuestion
  -# @ref TabAnswer
  -# @ref TabEdit
  -# @ref TabCategory
  -# @ref TabAboutProject

\n
<hr/>
\n
\n
\n
@section Intro Назначение
\n
Система WebFormsQA 1.2 предназначена для того, чтобы любой посетитель сайта смог задать вопрос специалисту в той
предметной области, к которой относиться сайт. Вопрос регистрируется на сайте и храниться в базе данных MySql.
Через определенное время специалист	компании может ответить на заданный вопрос. Ответ размещается на сайте
в соответствующей категории, а также высылается по почте человеку его задавшему.
\n
\n
\n
@section License Лицензия
\n
 Программный проект распространяется на условиях GNU General Public License версии 2 (GNU GPL v2)
@verbinclude licensing.txt
\n
http://www.gnu.org/licenses/gpl-2.0.html
\n
\n
\n
@section InstallPage Установка WebFormsQA
\n
\n
\n
@subsection InstallPageWindows Установка под Windows
<hr/>
\n 
<p>
Дистрибутив для установки под ОС семейства Windows создается программой 
Nullsoft Scriptable Install System (NSIS) — система создания инсталляторов для Microsoft Windows с открытыми исходными кодами, 
созданная компанией Nullsoft 
</p>
\n
<p>
Так как проект WebFormsQA написан на php, то он должен выполняться на стороне Web сервера, поэтому для его 
запуска под Windows на машину пользователя ставиться пакет "Денвер", который включает Web Сервер Apache, сервер
базы данных MySql и интерпретатор языка программирования "Php".
</p>
<p>
Эти программы уже настроены и вам достаточно перед началом работы
\b запустить \b"Денвер" через ярлык старт, а после окончания \b остановить используя ярлык стоп.  
Более подробную информацию см. разделе @ref VersionDistrib
</p>
<p>
\n проект WebFormsQA включен в структуру каталогов "Денвер"(а) и располагается в папке \n
\b "Корневой_каталог_установки\home\localhost\www"
</p>
\n
\n
\n
\n
<p>после запуска установочного файла "WebFormsQA-install.exe" (имя может содержать номер версии) вы увидите следующее окно установщика</p>
\n
@image html install-win-distrib.png Стартовое окно программы установки
\n
\n\n
где вы должны нажать кнопку далее и следовать инструкциям. Вам необходимо:
\n
-# Указать папку установки
-# Указать необходимость копирования на экран рабочего стола ярлыков программы
\n
<p>После установки в меню "ПУСК->программы->WebFormsQA" появяться ярлыки:</p>
\n
@code
-# Start Denver   - запуск сервера
-# Stop Denver    - остановка сервера
-# Restart Denver - перезагрузка сервера
-# Manual         - эта документация
@endcode
\n
\n
<p>Перед началом работы с проектом WebFormsQA необходимо создать базу данных MySql и пользователя от имени которого будет осуществляться
доступ к базе см. раздел @ref InstallDatabaseMySql<p>
\n
<p>Для запуска проекта вам необходимо запустить ваш Web Браузер, например InternetExplorer или Firefox
и набрать адрес \n "http://localhost/WebFormsQA"</p>
\n
<p>После создания базы данных вы также можете запустить автоматические тесты, набрав адрес \n "http://localhost/WebFormsQA/tests"</p>
\n
\n
@subsection InstallPageLinux Установка под Linux
<hr/>
\n
\n
<p>Версия дистрибутива WebFormsQA под Linux поставляется в виде deb пакета и может быть установлена в OS Linux семейства
Debian, Ubuntu или другой, использующей систему управления пакетами dpkg. Все установочные версии дистрибутива WebFormsQA
проверялись в ОС Ubuntu, но они также должны работать и в Debian.</p>
\n
<p>Для установки в Desktop версии дистрибутива Ubuntu, например в версии Ubuntu 11.10 вам необходимо скачать текущий
deb пакет по адресу http://www.scale-tech/webformsqa/distrib и далее открыть его в вашем файловом
менеджере Nautilus, после этого должен запуститься установщик пакетов, который спросит у вас административный 
пароль.  Обычно в Ubuntu пользователь root не используется, вместо этого используется команда sudo c паролем
к текущему аккаунту т.е. при запросе административного доступа вы должны указать ваш пароль еще раз.
Если же вы не можете выполнять команду sudo, вам нужно обратиться к администратору и попросить 
его установить скаченное вами программное обеспечение.</p>
\n
<p>Вы также можете установить дистрибутив WebFormsQA из консоли, используя команду sudo dpkg -i имя_deb_пакета, но
в этом случае вы должны удовлетворить все зависимости пакетов вручную. WebFormsQA для своей работы
использует следующие пакеты:<br></p>
<br>
@code
mysql-server           - сервер базы данных MySql
apache2                - Web сервер Apache2
php5                   - интерпретатор языка php для разработки динамических веб приложений
libapache2-mod-php5    - модуль php5 для сервера Apache2
@endcode
<br>
<br>
Таким образом вы можете установить пакеты в следующей последовательности:
 -# sudo apt-get install mysql-server apache2 php5 libapache2-mod-php5
 -# sudo dpkg -i WebFormsQA.deb
\n
<table border="1">
<tr bgcolor="#dcdcdc"> <td>
	<b>примечание:</b> <br>
    &nbsp;&nbsp;&nbsp;&nbsp; но при разрешение зависимостей пакетов вручную вы всегда можете столкнуться с проблеммой<br>
    &nbsp;&nbsp;&nbsp;&nbsp; установки дополнительных пакетов, каждый из которых также может использовать другие зависимости<br>
    &nbsp;&nbsp;&nbsp;&nbsp; т.е. процесс разрешения зависимостей может потребовать времени;<br>
	&nbsp;&nbsp;&nbsp;&nbsp; во время установки mysql-server вы должны будете задать root пароль администратора<br>
</td> </tr>
</table>
\n
<p> В том случае, если вы устанавливаете deb пакет в консоли, например в серверной версии Ubuntu и вы не хотите устанавливать
каждый зависимый пакет самостоятельно, с помощью команды apt-get install, вы можете создать собственный локальный репозиторий
пакетов следующим образом:
</p>
 -# установите программу для управления deb пакетами:
    @code 
      sudo apt-get install dpkg-dev
    @endcode
\n
 -# создайте каталог с репозиторием локально, например в домашней папке и скопируйте в нее собственные deb пакеты<br> 
    @code
      cd 
      mkdir my-repos
      cp путь_к_скаченному_пакету/WebFormsQA.deb my-repos/
    @endcode
\n    
 -# создайте описание со списком пакетов для локального репозитория
    @code
      cd my-repos
      dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
    @endcode
\n 
 -# добавьте в конфигурационный файл apt новый источник
    @code
      sudo echo "deb file:///home/пользователь/my-repos/ ./" >> /etc/apt/sources.list
    @endcode
\n    
 -# обновите список пакетов 
    @code
      sudo apt-get update
    @endcode
\n
 -# установите собственный пакет
    @code
      sudo apt-get install webformsqa
    @endcode
\n
\n
<p>Перед началом работы с проектом WebFormsQA необходимо создать базу данных MySql и пользователя от имени которого будет осуществляться
доступ к базе см. раздел @ref InstallDatabaseMySql<p>
\n
<p>Для запуска проекта вам необходимо запустить ваш Web Браузер, например InternetExplorer или Firefox
и набрать адрес "http://localhost/WebFormsQA"</p>
\n
<p>После создания базы данных вы также можете запустить автоматические тесты, набрав адрес "http://localhost/WebFormsQA/tests"</p>
\n
\n
@subsection InstallDatabaseMySql Создание базы данных MySql
\n
Для запуска WebFormsQA откройте ваш Web Браузер и наберите в адресной строке
http://localhost/WebFormsQA
\n
\n\n
примечание: у вас должен быть запущен Web Server Apache2 с возможностью запуска php скриптов и
сервер базы данных MySql
\n\n
\n
При первом запуске системы WebFormsQA будет инициирован процесс установки.
В этом режиме будут запущены установочные php скрипты.
\n
\n
После начала установке вы увидете следующую страницу браузера
\n
@image html install_start.png "Страница начала установки WebFormsQA"
В нижней части окна вы увидите следующие варианты установки:
@image html install_start_down.png 
\n
\n\n\n\n\n
\n
\n
<p>
Для создания новой базы данных, вам необходимо знать пароль "Администратора" базы данныых "MySql", в этом режиме
будет создана пользовательская база данных MySql например - "WebFormsQA", и создан пользователь
от имени которого php скрипты будут работать с базой данных, в противном случае вы должны запросить имя базы данных 
MySql и имя пользователя с паролем у вашего "Хост провайдера".<br> Обычно создать пользователя
и базу можно через Web Интерфейс вашего Хост провайдера. 
</p>
\n
<p>
Для обоих вариантов "Создать базу данных" или "Ввести существующие данные" вы можете указать ваш собственный 
административный пароль, в этом случае вы сможете уже в рабочем режиме системы "WebFormsQA" 
создать пользователя с дополнительными правами, которые позволят ему не только задавать вопросы в уже существующей категории, но
и добавлять ответы, изменять ответы и изменять категории вопросов.
</p>
\n
<p>
Во время установки имеется возможность нажать кнопку "прервать установку", после чего файл
install.php будет перенесен каталог includes\install\ и на этом процесс установки будет прерван.
</p>
\n
\n\n\n\n\n
\n
\n
<p>После выбора варианта "Создать базу данных" на экране браузера будет представлено следующее окно</p>
@image html install_create.png
\n
\n\n\n\n\n
\n
\n
После корректного заполнения указанной информации и нажатия кнопки "Создать базу данных" вы увидите следующие сообщения:
<table border="1">
<tr bgcolor="#dcdcdc"> <td align="center">
	<br>
    &nbsp;&nbsp;&nbsp;&nbsp; База данных и пользователь успешно созданы<br>
    &nbsp;&nbsp;&nbsp;&nbsp; Файл конфигурации успешно обновлен, и создана копия предыдущего<br>
    &nbsp;&nbsp;&nbsp;&nbsp; Соединение успешно установлено и созданы таблицы базы данных<br>
	&nbsp;&nbsp;&nbsp;&nbsp; \b Установка \b завершена<br>
</td> </tr>
</table>
\n
\n\n\n\n\n
\n
\n
при создании базы имеется возможность заполнить демонстрационной информацией для этого вам необходимо 
оставить отмеченным пункт "Добавить в базу демонстрационные категории с примерами вопросов и ответов"
\n
После выбора варианта "Ввести существующие данные" на экране браузера будет представлено следующее окно
@image html install_input.png
\n
\n\n\n\n\n
\n
\n
<p>Основное отличие данной формы в том, что нет поля указания root пароля базы MySql</p>
\n
<p>После успешной проверки подключения к существующей базе, вы увидете на экране следующие сообщения:</p>
<table border="1">
<tr bgcolor="#dcdcdc"> <td align="center">
	<br>
    &nbsp;&nbsp;&nbsp;&nbsp; Соединение успешно установлено и созданы таблицы базы данных<br>
    &nbsp;&nbsp;&nbsp;&nbsp; Файл конфигурации успешно обновлен, и создана копия предыдущего<br>
	&nbsp;&nbsp;&nbsp;&nbsp; \b Установка \b завершена<br>
</td> </tr>
</table>
\n
\n\n\n\n\n
\n
\n
<p>Далее после нажатия кнопки "Установка завершена" система перейдет к рабочей странице.</p>
\n
<hr/>
\n\n\n\n
\n
@section WebClientServer Схема клиент - серверного взаимодействия используемого в проекте
\n
Любой PHP проект использует схему клиент-серверных Web технологий, примерная
диаграмма схемы представлена на рисунке ниже:
\n
\dotfile web.dot
\n
\n\n
\n
@section UseTech Используемые технологии
\n
Проект является примером небольшой, но легко масштабируемой системы и показывает
возможности применение в одном проекте следующих технологий:
\n
\n\n
\n
@subsection UseTechTDD Разработка с использованием автоматизированных тестов (Test Driven Development )
\n
<hr/>
\n
<p>
Разработка через тестирование (test-driven development, TDD) — техника разработки программного обеспечения,
которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение,
затем пишется код, который позволит пройти тест и под конец проводится рефакторинг нового кода к соответствующим стандартам.
Кент Бек, считающийся изобретателем этой техники, утверждал в 2003 году, что разработка через тестирование поощряет простой
дизайн и внушает уверенность (inspires confidence).
</p>
\n
<p>
В 1999 году при своем появлении разработка через тестирование была тесно связана с концепцией «сначала тест» (test-first),
применяемой в экстремальном программировании, однако позже выделилась как независимая методология.
</p>
\n
<p>
Разработка через тестирование требует от разработчика создания автоматизированных модульных тестов, определяющих требования
к коду непосредственно перед написанием самого кода. Тест содержит проверки условий, которые могут либо выполняться, либо нет.
Когда они выполняются, говорят, что тест пройден. Прохождение теста подтверждает поведение предполагаемое программистом.
Разработчики часто пользуются библиотеками для тестирования (testing frameworks) для создания и автоматизации запуска наборов тестов.
</p>
\n
<p>
Программисты, использующие TDD на новых проектах, отмечают, что они реже ощущают необходимость использовать отладчик.
Если некоторые из тестов неожиданно перестают проходить, откат к последней версии, которая проходит все тесты, может быть
более продуктивным, нежели отладка.
</p>
\n
<p>
Разработка через тестирование предлагает больше, чем просто проверка корректности, она также влияет на дизайн программы.
Изначально сфокусировавшись на тестах, проще представить, какая функциональность необходима пользователю. Таким образом,
разработчик продумывает детали интерфейса до реализации. Контрактное программирование (Design by Contract) дополняет тестирование,
формируя необходимые требования через утверждения (assertions).
</p>
\n
<p>
Несмотря на то, что при разработке через тестирование требуется написать большее количество кода, общее время, затраченное на разработку,
обычно оказывается меньше. Большое количество тестов помогает уменьшить количество ошибок в коде. Устранение дефектов на более раннем этапе
разработки, препятствует появлению хронических и дорогостоящих ошибок, приводящих к длительной и утомительной отладке в дальнейшем.
</p>
\n
<p>
Разработка через тестирование способствует более модульному, гибкому и расширяемому коду. Это связано с тем, что при этой методологии
разработчику необходимо думать о программе, как о множестве небольших модулей, которые написаны и протестированы независимо и лишь
потом соединены вместе. Это приводит к меньшим, более специализированным классам, уменьшению связанности и более чистым интерфейсам.
Использование mock-объектов также вносит вклад в модуляризацию кода, поскольку требует наличия простого механизма для переключения
между mock- и обычными классами.
</p>
\n
\n
<p>
Система <b>WebFormsQA 1.2 </b> использует пакет <a href="http://pear.php.net/package/PHPUnit">PHPUnit</a> для автоматизированного тестирования.
Корневой тестовый файл располагается в каталоге "WebFormsQA/tests/index.php"
@ref index.php
\n
\n\n
Вы можете запустить тесты набрав в адресной строке браузера \b "http://localhost/WebFormsQA/tests"
\n
</p>
\n
\n\n
\n
@subsection UseTechSmarty Разделение прикладной логики и данных от внешнего представления страницы с использованием компилирующего обработчика шаблонов "Smarty"
\n
<hr/>
\n
<p>
&nbsp;&nbsp;&nbsp;&nbsp;Smarty - это компилирующий обработчик шаблонов для PHP и на PHP. Говоря более четко, он предоставляет один из инструментов,
которые позволяет добиться разделения прикладной логики и от представления. Это очень удобно в ситуациях, когда программист и
верстальщик шаблона - различные люди. Например, скажем, вы создаете страницу, которая показывает газетную статью.
Название статьи, автор и сама статья - элементы, которые не содержат никакой информации о том, как они будут представлены.
Их передают в Smarty из приложения, а верстальщик шаблона редактирует шаблоны и использует комбинацию тэгов HTML и тэгов шаблона,
чтобы отформатировать представление этих элементов (таблицы HTML, фоновые цвета, размеры шрифта, стиля и т.д.).
Однажды программист захочет изменить способ хранения статьи (сделать изменения в логике приложения.)
Это изменение не вызовет изменений в шаблонах. Содержание будет все еще передаваться в шаблон таким же самым способом.
Аналогично, если верстальщик захочет полностью перепроектировать шаблоны, это не потребует никаких изменений к прикладной логике.
</p>
\n
<p>
Теперь коротко о том, чего не может Smarty. Он не пытается полностью разделить логику от шаблонов. Нет никакой проблемы с логикой в ваших
шаблонах при условии, что это строго логика представления. Совет: держите прикладную логику вне шаблонов, а логику представления
вне приложения. Так проще всего сохранить проект управляемым и расширяемым в течение длительного времени.
<p>
\n
<p>
Одна из уникальных возможностей Smarty - компилирование шаблонов. Это означает, что Smarty читает файлы шаблонов и создает PHP-код на их
основе. Код создаётся один раз и потом только выполняется. Поэтому нет необходимости обрабатывать файл шаблона для каждого запроса и
каждый шаблон может пользоваться всеми преимуществами таких кэшируюших решений, как Zend Accelerator (http://www.zend.com) или
PHP Accelerator (http://www.php-accelerator.co.uk).
</p>
\n
Официальный сайт команды разработчиков Smarty http://www.smarty.net
\n
\n\n
\n
@subsection UseTechOOP Использование обьектно ориентированного подхода в языке программирования PHP
\n
<hr/>
\n
<p>
<b>Объектно-ориентированное</b> или объектное программирование (в дальнейшем ООП) —
парадигма программирования, в которой основными концепциями являются понятия объектов и классов
(либо, в менее известном варианте языков с прототипированием, — прототипов).
<p>
\n
<p>
<b>Класс</b> — это тип, описывающий устройство объектов. Понятие «класс»
подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает
нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса.
Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом,
чтобы их объекты соответствовали объектам предметной области.
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности, т. е. объекта.
</p>
\n
<p>
<b>Объект</b> — сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после
запуска результатов компиляции (и связывания) исходного кода на выполнение).
</p>
\n
<p>
<b>Прототип</b> — это объект-образец, по образу и подобию которого создаются другие объекты.
</p>
\n
\n
<p>
Структура данных «класс», представляющая собой объектный тип данных, внешне похожа на типы данных процедурно-ориентированных языков,
такие как структура в языке Си или запись в Паскале или QuickBasic. При этом элементы такой структуры (члены класса) могут сами
быть не только данными, но и методами (то есть процедурами или функциями). Такое объединение называется инкапсуляцией.
</p>
\n
<p>
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.
</p>
\n
<p>
Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП.
Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм.
</p>
\n
<h1> Основные понятия OOП </h1>
\n
<p>
    @b Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик.
</p>
<p>
    @b Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.
</p>
<p>
    @b Наследование – это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым или родительским. Новый класс – потомком, наследником или производным классом.
</p>
<p>
    @b Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
</p>
\n
Объектая модель классов используемых в проекте представлена  на странице <a href="inherits.html"> диаграмма классов </a>
\n
\n\n
\n
@subsection UseTechDoxigen Генерация внутренней документации по комментариям особого вида в исходном коде с использованием программы "Doxygen"
\n
<hr/>
\n
<p>
Эта документация была сгенерирована в автоматическом режиме по комментариям особого вида в исходном коде c использованием Doxygen.
файл содержащий эту страницу находится в папке doxygen/toc.h
</p>
\n
<p>
@b Doxygen — это кроссплатформенная система документирования исходных текстов, которая поддерживает C++, Си, Objective-C, Python, Java, IDL,
PHP, C#, Фортран, VHDL и, частично, D.
</p>
\n
<p>
Doxygen генерирует документацию на основе набора исходных текстов и также может быть настроен для извлечения структуры программы из недокументированных исходных кодов. Возможно составление графов зависимостей программных объектов, диаграмм классов и исходных кодов с гиперссылками.
Doxygen имеет встроенную поддержку генерации документации в формате HTML, LATEX, man, RTF и XML. Также вывод может быть легко сконвертирован в CHM, PostScript, PDF.
</p>
\n
<p>
Для html-представления документации, размещаемого на web-серверах, существует удобный способ организации поиска (при помощи создаваемого Doxygen'ом PHP-модуля)
и ссылок на внешнюю документацию.
</p>
\n
<p>
Doxygen используется многими проектами, в том числе KDE, Pidgin, Torque Game Engine, AbiWord, Mozilla, FOX toolkit, Crystal Space, Drupal. Есть встроенная поддержка в KDevelop.
</p>
\n
<p>
Doxygen - консольная программа в духе классической Unix. Она работает подобно компилятору, анализируя исходные тексты и создавая документацию.
Параметры создания документации читаются из конфигурационного файла, имеющего простой текстовый формат.
</p>
\n
<p>
Для упрощения манипуляций с конфигурационным файлом (а он содержит довольно много настроек), существует несколько утилит с графическим интерфейсом.
Одна из них, doxywizard, поставляется вместе с Doxygen. Ранее она была реализована с использованием Qt версии 3 и имела не очень удобный интерфейс.
В дальнейшем doxywizard был переписан на Qt версии 4
</p>
\n
\n\n
\n
@subsection UseTechOpen При разработке проекта использовались следующие "Open Source" системы
\n
<hr/>
\n\n
    @subsection UseTechOpenSubversion Cистема контроля версий "Subversion"
\n
<p>
@b Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.
</p>
\n
<p>
Цель проекта — заменить собой распространенную на тот момент систему Concurrent Versions System (CVS), которая ныне считается устаревшей Subversion
реализует все основные функции CVS и свободна от ряда недостатков последней.
</p>
\n
<p>
В настоящее время Subversion используется многими сообществами разработчиков открытого программного обеспечения
(в том числе сообществами, ранее использовавшими CVS). В их числе такие известные проекты, как Apache, KDE, GCC, Free Pascal, Python,
PHP, Ruby, Mono, FreeBSD, Haiku OS, AROS и MediaWiki. Subversion также широко используется в закрытых проектах и корпоративной сфере.
Хостинг Subversion, в том числе для проектов с открытым кодом, также предоставляют популярные хостинг-проекты SourceForge.net, Tigris.org,
Google Code и BountySource.
</p>
\n
<p>
В 2007 году независимая компания Forrester Research, сравнивая преимущества и недостатки различных систем, оценила Subversion как
«единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration
and Change Management (SCCM)».
</p>
\n
<p>
По данным статистики использования пакетов Linux-дистрибутивов Debian и Ubuntu, количество активных пользователей Subversion превосходит
аналогичный показатель для CVS, Git, Mercurial и Bazaar (по состоянию на июнь 2010 года).
</p>
\n\n
	@subsection UseTechOpenRedmine Cистема управления проектами "Redmine"
\n
<p>
Redmine — открытое серверное веб-приложение для управления проектами и отслеживания ошибок. Redmine написан на Ruby и представляет собой приложение
на основе широко известного веб-фреймворка Ruby on Rails. Распространяется согласно GNU General Public License.
</p>
\n
\n
@b Redmine предоставляет следующие возможности:
 -# ведение нескольких проектов;
 -# гибкая система доступа, основанная на ролях;
 -# система отслеживания ошибок;
 -# диаграммы Ганта и календарь;
 -# ведение новостей проекта, документов и управление файлами;
 -# оповещение об изменениях с помощью RSS-потоков и электронной почты;
 -# вики для каждого проекта;
 -# форумы для каждого проекта;
 -# учёт временных затрат;
 -# настраиваемые произвольные поля для инцидентов, временных затрат, проектов и пользователей;
 -# лёгкая интеграция с системами управления версиями (SVN, CVS, Git, Mercurial, Bazaar и Darcs);
 -# создание записей об ошибках на основе полученных писем;
 -# поддержка множественной аутентификации LDAP;
 -# возможность самостоятельной регистрации новых пользователей;
 -# многоязыковой интерфейс (в том числе русский);
 -# поддержка СУБД MySQL, PostgreSQL, SQLite, Oracle.
\n
\n\n
	@subsection UseTechOpenCruise Cистема постоянной сборки и интеграции "Cruise Control".
\n
<p>
Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая
заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем.
В обычном проекте, где над разными частями системы разработчики трудятся независимо, стадия интеграции является заключительной.
Она может непредсказуемо задержать окончание работ. Переход к непрерывной интеграции позволяет снизить трудоёмкость интеграции и сделать её
более предсказуемой за счет наиболее раннего обнаружения и устранения ошибок и противоречий.
</p>
\n
<p>
Требования к проекту для использования непрерывной интеграции
 -# Исходные коды и все, что необходимо для сборки и тестирования проекта, хранится в репозитории системы управления версиями;
 -# операции копирования из репозитория, сборки и тестирования всего проекта автоматизированы и легко вызываются из внешней программы.
</p>
\n
<p> @b Организация: </p>
<br>
На выделенном сервере организуется служба, в задачи которой входят:
 -# получение исходного кода из репозитория;
 -# сборка проекта;
 -# выполнение тестов;
 -# деплоймент готового проекта;
 -# отправка отчетов.
\n
<p>Локальная сборка может осуществляться:</p>
\n
 -# по внешнему запросу,
 -# по расписанию,
 -# по факту обновления репозитория и по другим критериям.
\n
<p>
В случае сборки по расписанию (англ. daily build — русск. ежедневная сборка), они, как правило, проводятся каждой ночью в автоматическом
режиме — ночные сборки (чтобы к началу рабочего дня были готовы результаты тестирования). Для различения дополнительно вводится система
нумерации сборок — обычно, каждая сборка нумеруется натуральным числом, которое увеличивается с каждой новой сборкой. Исходные тексты и
другие исходные данные при взятии их из репозитория системы контроля версий помечаются номером сборки. Благодаря этому, точно такая же
сборка может быть точно воспроизведена в будущем — достаточно взять исходные данные по нужной метке и запустить процесс снова. Это даёт
возможность повторно выпускать даже очень старые версии программы с небольшими исправлениями.
</p>
\n
@b Преимущества
 -# проблемы интеграции выявляются и исправляются быстро, что оказывается дешевле;
 -# немедленный прогон модульных тестов для свежих изменений;
 -# постоянное наличие текущей стабильной версии вместе с продуктами сборок — для тестирования и демонстрации;
 -# немедленный эффект от неполного или неработающего кода приучает разработчиков к работе в итеративном режиме с более коротким циклом.
\n
<p>@b Недостатки </p>
\n
 -# затраты на поддержку работы непрерывной интеграции;
 -# потенциальная необходимость в выделенном сервере под нужды непрерывной интеграции;
 -# немедленный эффект от неполного или неработающего кода отучает разработчиков от выполнения периодических резервных включений кода в репозиторий.
\n
\n
Сайт программы <a href="http://cruisecontrol.sourceforge.net">CruiseControl</a>
\n
<h3>
Взаимодействие этих систем в рамках данного проекта представлено на сайте
	    <a href="http://www.scale-tech.ru">scale-tech.ru</a>
</h3>
\n
\n\n
\n
@section ConceptWebFormsQA Концепция проекта WebFormsQA
\n
<hr/>
\n
Механизм взаимодействия Web Браузера передающего данные серверу, выполняющему PHP код и
компилирующего обработчка шаблонов Smarty представлен на рисунке.
\n
\dot
	digraph concept {
		node [shape=record];
		WebPage [shape=record,label="{Web Браузер|<mainPage> \nГлавная страница\n\n\n|{левая\nчасть\nглавной\nстраницы|\n\nТекущая страница\n\n\n\n\n\n|правая\nчасть\nглавной\nстраницы}|\nниз главной страницы}"];

		smarty [shape=record,label="{<smarty>Smarty\n(внешнее представление\nhtml страницы)|<smartyMain>Главный шаблон|{ |<include> include| } }"];
		smartyCurrent [shape=record,label="{Текущий smarty шаблон}"];
		classPhpMainPage [shape=record,URL="@ref Page",label="{PHP|<mainPage>класс MainPage|{ |<choice>список классов подстраниц\n\nвыбор текущей страницы\nв зависимости от атрибутов\nпришедших с помощью\nметода передачи данных\n GET или POST\n(прикладная логика)| } }"];

		WebPage:mainPage -> classPhpMainPage;
		classPhpMainPage:mainPage -> smarty:smartyMain;

		smarty:include -> smartyCurrent;
	}
\enddot
\n
<p>
Любая веб страница представленная пользователю состоит из постоянной части:
 -# верхняя часть страницы;
 -# левая часть страницы;
 -# правая часть страницы;
 -# нижняя часть страницы;
</p>
\n
и подстраницы, которую выбрал пользователь в текущей момент времени.
\n
<p>
PHP класс MainPage содержит в себе все классы возможных подстраниц и в зависимости от текущего запроса переданного от клиента методом
GET или POST, класс выбирает объект текущей страницы.
Классы @ref MainPage и класс текущей @ref Page страницы формирует переменные, которые он передает объекту Smarty.
Smarty создает окончательную html страницу, которая будет передана пользователю. Страница формируется из корневого шаблона
@ref "index.tpl.html", который в свою очередь включает с помощью "include file" подшаблон текущей страницы.
</p>
\n
\n\n
\n
@section VersionDistrib Версии дистрибутива
<hr/>
\n
Проект доступен для нескольких операционных систем:<br>
@li Операционная система Linux, дистрибутивы Debian, Ubuntu.
@li Операционная система windows XP, Windows Vista и Windows 7.
\n
<p>
Дистрибутив под Linux оформлен в виде deb пакета и для для запуска webFormsQA дополнительно устанавливает и настраивает:
 -# Web сервер Apache2;
 -# сервер базы данных MySql;
 -# поддержка php5 для Apache2;
</p>
\n
<p> Номерация версии осуществляется в следующем виде x.y.z
@code
	где x - старший номер версии
	    y - младший номер версии
	    z - номер сборки из системы контроля версий svn
@endcode
</p>
\n
<p>
Дистрибутив под Windows не устанавливает полноценный Web сервер, а использует Apache в составе пакета "Денвер".
</p>
\n
<p>
Денвер (от сокр. Д.н.w.р — джентльменский набор Web-разработчика) — набор дистрибутивов и программная оболочка, предназначенные для
создания и отладки сайтов (веб-приложений, прочего динамического содержимого интернет-страниц) на локальном ПК (без необходимости подключения
к сети Интернет) под управлением ОС Windows
</p>
\n
Сайт программы <a href="http://www.denwer.ru">денвер</a>
\n
\n\n
\n
@section OfficialSite Официальный сайт
<hr/>
\n
@image html logo.png
<table width=100% border=0>
<tr> <td align=center width=100%> Сайт программы <a href="http://www.scale-tech.ru">scale-tech.ru</a>  </td> </tr>
</table>
\n
<hr/>
\n
<br><br>
\n
\n
\n\n\n\n
\n
\n
@section DescriptionUserGUI Описание пользовательского интерфейса
<hr/>
\n
После завершения процесса установки - запись в базу данных MySql и в файл config/connect.dat.php конфигурационной информации
система WebFormsQA запуститься в рабочем режиме.
\n
@section PageRegisterUser Регистрация нового пользователя
\n
Для начала работы с системой вам необходимо зарегистрироваться для этого в верхней части страцицы вы увидите ссылку
"регистрация" после нажатия на которую вы сможете перейти к странице представленой ниже:
\n
@image html page_register.png
\n
\n\n\n\n
Обязательными полями для заполнения являются: "Имя пользователя (login)" и "Пароль пользователя", а также 
необходимо правильно заполнить код подтверждения, который вам позволить добавить регистрационные данные
в пользовательскую базу данных, которую вы создали при "Установке системы WebFormsQA"
\n
\n
На рабочей странице @b WebFormsQA располагаются следующие вкладки:
\n
@section TabViewQuestion Вкладка "Вопросы"
\n
 -# Вкладка позволяет просматривать все вопросы находящиеся в базе и на которые уже имеется ответ;
 -# Вопросы можно просмотреть как в выбранной категории, так и все (общий список по всем категориям);
 -# Имеется возможность найти вопрос или ответ с помощью простого поиска, указав искомую фразу, которая
    может быть найдена только в вопросах, только в ответах или и там и там;
 -# На вкладке присутствует рамка с дополнительными параметрами отображения, установив галочку "показывать только вопросы" вы 
    сможете просматривать содержимое страницы с вопросами в более сжатом виде т.е. на странице будет присутствовать только список
    с вопросами, каждый из которых представляет из себя ссылку, открыв которую вы увидете ту же самую страницу с одним раскрытым ответом
    на выбранный вопрос;
 -# вкладка доступна для всех пользователей.
\n
<p>
Ниже представлена вкладка "вопросы" с демонстрационными категориями, которую сможет увидеть пользователь с административными правами
</p>
\n\n
@image html input_user_admin.png
\n\n\n\n\n
\n
@section TabGiveQuestion Вкладка "Задать вопрос"
 -# Вкладка позволяет задать вопрос в уже существующей категории;
 -# Вкладка доступна для всех пользователей.
\n
<p>Ниже представлена вкладка "Задать вопрос"</p>
\n
@image html page_give_question.png
\n\n\n\n\n
\n
@section TabAnswer Вкладка "Добавить ответ"
 -# Вкладка позволяет добавить ответ на новые вопросы, а также изменить категорию вопроса и удалить выбранный новый вопрос;
 -# Вкладка всегда показывает все новые вопросы в базе, независимо от выбранной категории. Выбор категории используется для 
    переноса указанного вопроса в другую категорию;
 -# Вкладка доступна для пользователей с административными правами. Сам административный пароль указывается на странице
    установки, поля - "Введите имя администратора" и "Введите пароль, который будет использован для входа в административную   
    часть сайта". Далее зная этот пароль вы можете на странице регистрации создать пользователя с административными правами.
\n
<p>Ниже представлена вкладка "Добавить ответ"</p>
\n
@image html page_add_answer.png
\n\n\n\n\n
\n
\n
\n
@section TabEdit Вкладка "Изменить ответ"
 -# Для выбранной категории можно выбрать вопрос и изменить ответ на него;
 -# вкладка доступна для пользователей с административными правами
\n
Ниже представлена вкладка "Изменить ответ" 
@image html page_edit_answer.png
\n\n\n\n\n
\n
@section TabCategory Вкладка "Изменить категорию"
 -# вкладка доступна для пользователей с административными правами
\n
и представлена на рисунке
\n\n\n\n
@image html page_category.png
\n
<p>вкладка обеспечивает операции удаления выбранной категории и добавление новой категории
в корневую или в текущую выбранную.</p>\n\n
<p>В случае удаления категории с существующими вопросами, они будут перенесены во 
временно созданную категорию "Удаленные"</p>
<p>Если удаляемая категория содержит другие вложенные категории, то данная категория не будет удалена, пока
не удалены все вложенные в нее под категории.</p>
\n
\n
@section TabAboutProject Вкладка "о проекте"
\n
 -# Вкладка содержит краткое описание системы, а также адрес сайта разработчика;
 -# Вкладка доступна для всех пользователей
\n
\n\n\n\n\n
\n
\n
<hr/>
При подготовке страницы использовался сайт <a href="http://www.wikipedia.org">wikipedia</a>
\n
\n
*/
Файл содержит оглавление и содержание титульной страницы "Руководства программиста WebFormsQA"

